package com.simon.cdc.database;

import lombok.Getter;

import java.io.Serializable;

/**
 * 数据库连接配置（专为Druid连接池优化）
 */
@Getter
public class DatabaseConnectionConfig implements Serializable {
    // Getter方法
    private final String host;
    private final int port;
    private final String databaseName;
    private final String username;
    private final String password;
    private final int initialPoolSize;
    private final int maxPoolSize;

    public DatabaseConnectionConfig(String host, int port, String databaseName, 
                                  String username, String password, 
                                  int initialPoolSize, int maxPoolSize) {
        this.host = host;
        this.port = port;
        this.databaseName = databaseName;
        this.username = username;
        this.password = password;
        this.initialPoolSize = initialPoolSize;
        this.maxPoolSize = maxPoolSize;
    }

    /**
     * 构建并返回JDBC连接URL
     *
     * 该方法根据主机名、端口号和数据库名称构建一个MySQL的JDBC连接URL
     * URL中包含了访问数据库所需的信息，以及一系列连接参数配置，如字符编码、SSL设置等
     *
     * @return JDBC连接URL字符串，包含数据库连接的必要信息和配置
     */
    public String getJdbcUrl() {
        // 使用String.format方法格式化JDBC URL，其中包含了主机名、端口、数据库名称以及一系列连接参数
        // 这些参数确保了数据库连接的正确性和高效性，例如，使用Unicode和UTF-8编码，禁用SSL，允许执行多查询等
        return String.format("jdbc:mysql://%s:%d/%s?useUnicode=true&characterEncoding=UTF-8" +
            "&useSSL=false&allowMultiQueries=true&nullCatalogMeansCurrent=true",
            host, port, databaseName);
    }

}